// vue.config.js
// const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

const path = require('path')

module.exports = {
  // publicPath: process.env.VUE_APP_CDN,
  publicPath: '/',
  productionSourceMap: false,
  css: {
    // 是否使用css分离插件 ExtractTextPlugin
    extract: true,
    // 开启 CSS source maps?
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {},
    // 启用 CSS modules for all css / pre-processor files.
    modules: false
  },
  configureWebpack: (config) => {
    config.entry.app = ['babel-polyfill', './src/main.js']
    config.externals = {
      vue: 'Vue',
      'vue-router': 'VueRouter',
      'vuex': 'Vuex',
      'axios': 'axios',
      'echarts': 'echarts'
    }


    // 生产打包配置
    let prd_plugins = [
      //删除console插件
      new TerserPlugin({
        terserOptions: {
          warnings: false,
          compress: {
            drop_console: false,
            drop_debugger: true,
            pure_funcs: []
          },
          output: {
            // 去掉注释内容
            comments: false,
          }
        },
        sourceMap: false,
        parallel: true,
      }),
      new FileManagerPlugin({
        onEnd: {
          archive: [{
            source: './dist',
            destination: `./dist/xk-esp-as-home-h5-${process.VUE_CLI_SERVICE.mode}.tar.gz`,
            format: 'tar',
            options: {
              gzip: true,
              gzipOptions: {
                level: 1
              },
              globOptions: {
                nomount: true
              }
            }
          }]
        }
      }),
      new BundleAnalyzerPlugin({
        analyzerMode: 'disabled',
        openAnalyzer: true,
        generateStatsFile: false,
        statsFilename: 'stats.json',
      }),
    ]
    //只有打包生产环境才需要将console删除
    if (process.env.NODE_ENV == 'production') {
      config.plugins = [...config.plugins, ...prd_plugins]
    }
  }
  ,
  chainWebpack: config => {
    config.module.rule('svg').exclude.add(path.resolve('./src/icons/svg')).end()
    config.module.rule('icons').test(/\.svg$/).include.add(path.resolve('./src/icons/svg')).end()
      .use('svg-sprite-loader').loader('svg-sprite-loader').options({ symbolId: '[name]' }).end()
    // config.module
    //   .rule('images')
    //   .use('image-webpack-loader')
    //   .loader('image-webpack-loader')
    //   .options({
    //     bypassOnDebug: true
    //   })
    //   .end()


    //--------------------------------胡畔的版本
    // const svgRule = config.module.rule('svg')
    // 清除已有的所有 loader。
    // 如果你不这样做，接下来的 loader 会附加在该规则现有的 loader 之后。
    // svgRule.uses.clear()
    // svgRule
    //   .test(/\.svg$/)
    //   .include.add(path.resolve(__dirname, './src/icons/svg'))
    //   .end()
    //   .use('svg-sprite-loader')
    //   .loader('svg-sprite-loader')
    //   .options({
    //     symbolId: '[name]'
    //   })
    // const fileRule = config.module.rule('file')
    // fileRule.uses.clear()
    // fileRule
    //   .test(/\.svg$/)
    //   .exclude.add(path.resolve(__dirname, './src/icons/svg'))
    //   .end()
    //   .use('file-loader')
    //   .loader('file-loader')


    // 移除 prefetch 插件
    config.plugins.delete('prefetch')
    // 压缩代码
    config.optimization.minimize(true)
    // 分割代码
    config.optimization.splitChunks({
      chunks: 'all',
      minSize: 200000,
      maxSize: 500000,
      cacheGroups: {
        vendor: {
          test: /node_modules/,
          name: 'vendor',
          priority: 100
        }
      }
    })
  }
  // config.output.filename('[name].[hash].js').end()
  // }
}